/*
 * ArbolBSharp.h
 *
 *  Created on: Sep 20, 2010
 *      Author: nicoabie
 */

#ifndef ARBOLBSHARP_H_
#define ARBOLBSHARP_H_

#include "Nodo.h"
#include "NodoHoja.h"
#include "Registro.h"
#include "../src/Common/ManejadorArchivo.h"

class ArbolBSharp {

private:

	fstream archivo;
	fstream archivoNodosLibres;

	long offsetRaiz;
	string nombreArchivo;

	//SE GUARDA EN EL HEADER
	long tamanioCubeta;

	//SE GUARDA EN EL HEADER
	unsigned int cantidadNodos;

	//SE GUARDA EN EL HEADER
	unsigned int cantidadNodosLibres;

	//SE GUARDA EN EL HEADER
	unsigned int cantidadRegistros;

	/*
	 * TODO cada vez que se agregue un atributo que deba guardarse como dato de control,
	 * refactorizar BPlusTree::BPlusTree para que tome el valor correcto.
	 */
	unsigned int tamanioDatosDeControl;

	Nodo* raiz;

	int insertarRecursivo(Registro* registro, Nodo* nodo, char** keyAscendente, int* idNodoAscendente);

	int persistirNodo(Nodo* nodo);

public:

	ArbolBSharp();

	ArbolBSharp(char* nombreArchivo, long tamanioCubeta);


	int insertarRegistro(Registro* registro);

	Nodo* getRaiz();

	void persistirNodo4Tests(Nodo* nodo);

	virtual ~ArbolBSharp();
};

#endif /* ARBOLBSHARP_H_ */
